/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.tramite.be;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.cip.esymons.general.be.Cargo;
import org.cip.esymons.general.be.Empleado;

/**
 *
 * @author FreddyHIQ
 */
@Entity
@Table(name = "tra_operacion")
@NamedQueries({@NamedQuery(name = "Operacion.findAll", query = "SELECT o FROM Operacion o"), @NamedQuery(name = "Operacion.findByOpeCodigo", query = "SELECT o FROM Operacion o WHERE o.opeCodigo = :opeCodigo"), @NamedQuery(name = "Operacion.findByOpeFecha", query = "SELECT o FROM Operacion o WHERE o.opeFecha = :opeFecha"), @NamedQuery(name = "Operacion.findByOpeFechRecep", query = "SELECT o FROM Operacion o WHERE o.opeFechRecep = :opeFechRecep"), @NamedQuery(name = "Operacion.findByOpeFechTram", query = "SELECT o FROM Operacion o WHERE o.opeFechTram = :opeFechTram"), @NamedQuery(name = "Operacion.findByOpeDescripcion", query = "SELECT o FROM Operacion o WHERE o.opeDescripcion = :opeDescripcion"), @NamedQuery(name = "Operacion.findByOpeEstado", query = "SELECT o FROM Operacion o WHERE o.opeEstado = :opeEstado"), @NamedQuery(name = "Operacion.findByOpeAccion", query = "SELECT o FROM Operacion o WHERE o.opeAccion = :opeAccion")})
public class Operacion implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ope_codigo")
    private Long opeCodigo;
    @Basic(optional = false)
    @Column(name = "ope_fecha")
    @Temporal(TemporalType.TIMESTAMP)
    private Date opeFecha;
    @Column(name = "ope_fech_recep")
    @Temporal(TemporalType.TIMESTAMP)
    private Date opeFechRecep;
    @Column(name = "ope_fech_tram")
    @Temporal(TemporalType.TIMESTAMP)
    private Date opeFechTram;
    @Basic(optional = false)
    @Column(name = "ope_descripcion")
    private String opeDescripcion;
    @Basic(optional = false)
    @Column(name = "ope_estado")
    private EnumEstadoOperacion opeEstado;
    @Column(name = "ope_accion")
    private EnumAccionOperacion opeAccion;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkOpeCodigo", fetch = FetchType.LAZY)
    private List<DocumentoIncluido> documentoIncluidoCollection;
    @JoinColumn(name = "fk_tra_codigo", referencedColumnName = "tra_codigo")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Transaccion fkTraCodigo;
    @JoinColumn(name = "fk_pro_codigo", referencedColumnName = "pro_codigo")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Procedimiento fkProCodigo;
    @JoinColumn(name = "fk_res_codigo", referencedColumnName = "fk_per_codigopna")
    @ManyToOne(fetch = FetchType.LAZY)
    private Empleado fkResCodigo;
    @JoinColumn(name = "car_codigo", referencedColumnName = "car_codigo")
    @ManyToOne(fetch = FetchType.LAZY)
    private Cargo carCodigo;
    @OneToMany(mappedBy = "origen", fetch = FetchType.LAZY)
    private List<Operacion> operacionCollection;
    @JoinColumn(name = "origen", referencedColumnName = "ope_codigo")
    @ManyToOne(fetch = FetchType.LAZY)
    private Operacion origen;

    public Operacion() {
    }

    public Operacion(Long opeCodigo) {
        this.opeCodigo = opeCodigo;
    }

    public Operacion(Procedimiento proc) {
        this.fkProCodigo=proc;
    }

    public Operacion(String proc) {
        this.opeDescripcion=proc;
    }

    public Operacion(Long opeCodigo, Date opeFecha, String opeDescripcion, EnumEstadoOperacion opeEstado) {
        this.opeCodigo = opeCodigo;
        this.opeFecha = opeFecha;
        this.opeDescripcion = opeDescripcion;
        this.opeEstado = opeEstado;
    }

     public Operacion(Date opeFecha, String opeDescripcion, EnumEstadoOperacion opeEstado, Transaccion tran, Procedimiento proc, Empleado emp) {
        this.opeFecha = opeFecha;
        this.opeDescripcion = opeDescripcion;
        this.opeEstado = opeEstado;
        this.fkTraCodigo=tran;
        this.fkProCodigo=proc;
        this.fkResCodigo=emp;
    }

    public Operacion(EnumEstadoOperacion opeEstado, Date opeFecha, String opeDescripcion, Transaccion tran, Procedimiento proc, Empleado emp) {
        this.opeFecha = opeFecha;
        this.opeDescripcion = opeDescripcion;
        this.fkTraCodigo=tran;
        this.fkProCodigo=proc;
        this.fkResCodigo=emp;
        this.opeEstado=opeEstado;
    }

    public Operacion(EnumEstadoOperacion opeEstado, Date opeFecha, String opeDescripcion, Transaccion tran, Procedimiento proc, Empleado emp, Cargo cargo, EnumAccionOperacion accion) {
        this.opeEstado=opeEstado;
        this.opeFecha = opeFecha;
        this.opeDescripcion = opeDescripcion;
        this.fkTraCodigo=tran;
        this.fkProCodigo=proc;
        this.fkResCodigo=emp;
        this.carCodigo=cargo;
        this.opeAccion=accion;
    }

    public Operacion(EnumEstadoOperacion opeEstado, Operacion origen, Date opeFecha, String opeDescripcion, Transaccion tran, Procedimiento proc, Empleado emp, Cargo cargo, EnumAccionOperacion accion) {
        this.opeEstado=opeEstado;
        this.origen = origen;
        this.opeFecha = opeFecha;
        this.opeDescripcion = opeDescripcion;
        this.fkTraCodigo=tran;
        this.fkProCodigo=proc;
        this.fkResCodigo=emp;
        this.carCodigo=cargo;
        this.opeAccion=accion;
    }

    public Operacion(Date opeFecha, String opeDescripcion, EnumEstadoOperacion opeEstado, Transaccion tran, Procedimiento proc) {
        this.opeFecha = opeFecha;
        this.opeDescripcion = opeDescripcion;
        this.opeEstado = opeEstado;
        this.fkTraCodigo=tran;
        this.fkProCodigo=proc;
    }

    public Long getOpeCodigo() {
        return opeCodigo;
    }

    public void setOpeCodigo(Long opeCodigo) {
        this.opeCodigo = opeCodigo;
    }

    public Date getOpeFecha() {
        return opeFecha;
    }

    public void setOpeFecha(Date opeFecha) {
        this.opeFecha = opeFecha;
    }

    public Date getOpeFechRecep() {
        return opeFechRecep;
    }

    public void setOpeFechRecep(Date opeFechRecep) {
        this.opeFechRecep = opeFechRecep;
    }

    public Date getOpeFechTram() {
        return opeFechTram;
    }

    public void setOpeFechTram(Date opeFechTram) {
        this.opeFechTram = opeFechTram;
    }

    public String getOpeDescripcion() {
        return opeDescripcion;
    }

    public void setOpeDescripcion(String opeDescripcion) {
        this.opeDescripcion = opeDescripcion;
    }

    public EnumEstadoOperacion getOpeEstado() {
        return opeEstado;
    }

    public void setOpeEstado(EnumEstadoOperacion opeEstado) {
        this.opeEstado = opeEstado;
    }

    public EnumAccionOperacion getOpeAccion() {
        return opeAccion;
    }

    public void setOpeAccion(EnumAccionOperacion opeAccion) {
        this.opeAccion = opeAccion;
    }

    public List<DocumentoIncluido> getDocumentoIncluidoCollection() {
        return documentoIncluidoCollection;
    }

    public void setDocumentoIncluidoCollection(List<DocumentoIncluido> documentoIncluidoCollection) {
        this.documentoIncluidoCollection = documentoIncluidoCollection;
    }

    public Transaccion getFkTraCodigo() {
        return fkTraCodigo;
    }

    public void setFkTraCodigo(Transaccion fkTraCodigo) {
        this.fkTraCodigo = fkTraCodigo;
    }

    public Procedimiento getFkProCodigo() {
        return fkProCodigo;
    }

    public void setFkProCodigo(Procedimiento fkProCodigo) {
        this.fkProCodigo = fkProCodigo;
    }

    public Empleado getFkResCodigo() {
        return fkResCodigo;
    }

    public void setFkResCodigo(Empleado fkResCodigo) {
        this.fkResCodigo = fkResCodigo;
    }

    public Cargo getCarCodigo() {
        return carCodigo;
    }

    public void setCarCodigo(Cargo carCodigo) {
        this.carCodigo = carCodigo;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (opeCodigo != null ? opeCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Operacion)) {
            return false;
        }
        Operacion other = (Operacion) object;
        if ((this.opeCodigo == null && other.opeCodigo != null) || (this.opeCodigo != null && !this.opeCodigo.equals(other.opeCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.cip.esymons.tramite.be.Operacion[opeCodigo=" + opeCodigo + "]";
    }

    public List<Operacion> getOperacionCollection() {
        return operacionCollection;
    }

    public void setOperacionCollection(List<Operacion> operacionCollection) {
        this.operacionCollection = operacionCollection;
    }

    public Operacion getOrigen() {
        return origen;
    }

    public void setOrigen(Operacion origen) {
        this.origen = origen;
    }

}